<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.8.0">
  <meta charset="utf-8">
  
  <title>索引整理 | 华锅锅的博客</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  
    <meta name="keywords" content="Huaguoguo,Huaguoguo's Blog">
  
  <meta name="description" content="概述数据库只做两件事情：存储数据、检索数据。而索引是在你存储的数据之外，额外保存一些路标（一般是B+树），以减少检索数据的时间。所以索引是主数据衍生的附加结构。 一张表可以建立任意多个索引，每个索引可以是任意多个字段的组合。索引可能会提高查询速度（如果查询时使用了索引），但一定会减慢写入速度，因为每次写入时都需要更新索引，所以索引只应该加在经常需要搜索的列上，不要加在写多读少的列上。 单列索引 与">
<meta name="keywords" content="java,数据库">
<meta property="og:type" content="article">
<meta property="og:title" content="索引整理">
<meta property="og:url" content="http://huaguoguo.gitee.io/2019/07/08/index-study/index.html">
<meta property="og:site_name" content="华锅锅的博客">
<meta property="og:description" content="概述数据库只做两件事情：存储数据、检索数据。而索引是在你存储的数据之外，额外保存一些路标（一般是B+树），以减少检索数据的时间。所以索引是主数据衍生的附加结构。 一张表可以建立任意多个索引，每个索引可以是任意多个字段的组合。索引可能会提高查询速度（如果查询时使用了索引），但一定会减慢写入速度，因为每次写入时都需要更新索引，所以索引只应该加在经常需要搜索的列上，不要加在写多读少的列上。 单列索引 与">
<meta property="og:locale" content="default">
<meta property="og:updated_time" content="2019-07-08T07:57:20.588Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="索引整理">
<meta name="twitter:description" content="概述数据库只做两件事情：存储数据、检索数据。而索引是在你存储的数据之外，额外保存一些路标（一般是B+树），以减少检索数据的时间。所以索引是主数据衍生的附加结构。 一张表可以建立任意多个索引，每个索引可以是任意多个字段的组合。索引可能会提高查询速度（如果查询时使用了索引），但一定会减慢写入速度，因为每次写入时都需要更新索引，所以索引只应该加在经常需要搜索的列上，不要加在写多读少的列上。 单列索引 与">
  
  
    <link rel="icon" href="/favicon.ico">
  
  <link href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">
  <link rel="stylesheet" href="/css/style.css">
  <script src="/js/pace.min.js"></script>
  

  
  

</head>
</html>
<body>
  <div id="container">
      <header id="header">
    <div id="banner"></div>
    <div id="header-outer">
        <div id="header-menu" class="header-menu-pos animated">
            <div class="header-menu-container">
                <a href="/" class="left">
                    <span class="site-title">Huaguoguo&#39;s Blog</span>
                </a>
                <nav id="header-menu-nav" class="right">
                    
                    <a href="/">
                        <i class="fa fa-home"></i>
                        <span>Home</span>
                    </a>
                    
                    <a href="/archives">
                        <i class="fa fa-archive"></i>
                        <span>Archives</span>
                    </a>
                    
                    <a href="/about">
                        <i class="fa fa-user"></i>
                        <span>About</span>
                    </a>
                    
                </nav>
                <a class="mobile-header-menu-button">
                    <i class="fa fa-bars"></i>
                </a>
            </div>
        </div>
        <div id="header-row">
            <div id="logo">
                <a href="/">
                    <img src="/images/logo.png" alt="logo">
                </a>
            </div>
            <div class="header-info">
                <div id="header-title">
                    
                    <h2>
                        Huaguoguo&#39;s Blog
                    </h2>
                    
                </div>
                <div id="header-description">
                    
                    <h3>
                        敲代码是热爱，敲到世界充满爱
                    </h3>
                    
                </div>
            </div>
            <nav class="header-nav">
                <div class="social">
                    
                        <a title="home" target="_blank" href="//huaguoguo.gitee.io">
                            <i class="fa fa-home fa-2x"></i></a>
                    
                        <a title="Github" target="_blank" href="//gitee.com/huaguoguo">
                            <i class="fa fa-github fa-2x"></i></a>
                    
                </div>
            </nav>
        </div>
    </div>
</header>
      <div class="outer">
        <section id="main" class="body-wrap"><article id="post-index-study" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-inner">
    
      <header class="article-header">
        
  
    <h1 class="post-title" itemprop="name">
      索引整理
    </h1>
    <div class="post-title-bar">
      <ul>
          
        <li>
          <i class="fa fa-calendar"></i>  2019-07-08
        </li>
        <li>
          <i class="fa fa-eye"></i>
          <span id="busuanzi_value_page_pv"></span>
        </li>
      </ul>
    </div>
  

          
      </header>
    
    <div class="article-entry post-content" itemprop="articleBody">
      
            
            <h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><p>数据库只做两件事情：存储数据、检索数据。而索引是在你存储的数据之外，额外保存一些路标（一般是B+树），以减少检索数据的时间。所以索引是主数据衍生的附加结构。</p>
<p>一张表可以建立<strong>任意多个索引</strong>，每个索引可以是任意多个字段的组合。索引可能会提高查询速度（如果查询时使用了索引），但一定会减慢写入速度，因为每次写入时都需要更新索引，所以索引只应该加在经常需要搜索的列上，不要加在写多读少的列上。</p>
<h2 id="单列索引-与-复合索引"><a href="#单列索引-与-复合索引" class="headerlink" title="单列索引 与 复合索引"></a>单列索引 与 复合索引</h2><p>只包含一个字段的索引叫做单列索引，包含两个或以上字段的索引叫做复合索引（或组合索引）。建立复合索引时，字段的顺序极其重要。</p>
<p>下面这个SQL语句在 列X，列Y，列Z 上建立了一个复合索引。</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">CREATE INDEX 索引名 ON 表名(列名X, 列名Y, 列名Z);</span><br></pre></td></tr></table></figure>
<p>其实这相当于建立了三个索引，分别是：</p>
<ol>
<li>单列索引（列X） </li>
<li>复合索引（列X, 列Y） </li>
<li>复合索引（列X，列Y，列Z）。</li>
</ol>
<p>如何理解呢？</p>
<p>我们可以把多个字段组合的索引比喻成一个老式的纸质电话簿，三列分别是：</p>
<p>姓 - 名 - 电话号码<br>查看电话号码的顺序：</p>
<ol>
<li>电话簿中的内容先按照姓氏的拼音排序查找，</li>
<li>相同姓氏再按名字的拼音排序，这相当于在（姓，名）上建立了一个复合索引。</li>
</ol>
<p>你可以通过这个索引快速找到所有具有特定姓氏的人的电话号码，也可以快速找到具有特定 姓-名 组合的人的电话号码。<strong>然而，想象一下，如果你想找到某个特定名字的人，其实这个索引是没有用的，你只能从头到尾遍历整个电话簿。</strong></p>
<h2 id="唯一索引-与-主键"><a href="#唯一索引-与-主键" class="headerlink" title="唯一索引 与 主键"></a>唯一索引 与 主键</h2><p><strong>唯一索引</strong>是在表上一个或者多个字段组合建立的索引，这个（或这几个）字段的值组合起来在表中<strong>不可以重复</strong>。一张表可以建立<strong>任意多</strong>个唯一索引，但一般只建立一个。</p>
<p><strong>主键是一种特殊的唯一索引</strong>，区别在于，<strong>唯一索引列允许null值</strong>，而主键列不允许为null值。<strong>一张表最多建立一个主键</strong>，<strong>也可以不建立主键</strong>。</p>
<h2 id="聚簇索引、非聚簇索引、主键"><a href="#聚簇索引、非聚簇索引、主键" class="headerlink" title="聚簇索引、非聚簇索引、主键"></a>聚簇索引、非聚簇索引、主键</h2><p>在《数据库原理》一书中是这么解释聚簇索引和非聚簇索引的区别的：</p>
<p><strong>聚簇索引</strong>的叶子节点就是数据节点，而<strong>非聚簇索引</strong>的叶子节点仍然是索引节点，只不过有指向对应数据块的指针。</p>
<p>怎么理解呢？</p>
<p>聚簇索引的顺序，就是数据在硬盘上的物理顺序。<strong>一般情况下主键就是默认的聚簇索引。</strong></p>
<p><strong>一张表只允许存在一个聚簇索引</strong>，因为真实数据的物理顺序只能有一种。如果一张表上还没有聚簇索引，为它新创建聚簇索引时，就需要对已有数据重新进行排序，所以对表进行修改速度较慢是聚簇索引的缺点，对于经常更新的列不宜建立聚簇索引。</p>
<p><strong>聚簇索引性能最好</strong>，因为一旦具有第一个索引值的记录被找到，具有连续索引值的记录也一定物理地紧跟其后。一张表只能有一个聚簇索引，所以非常珍贵，必须慎重设置，一般要根据这个表最常用的SQL查询方式选择某个（或多个）字段作为聚簇索引（或复合聚簇索引）。</p>
<p><strong>聚簇索引默认是主键</strong>，如果表中没有定义主键，InnoDB会选择一个唯一的非空索引代替（“唯一的非空索引”是指列不能出现null值的唯一索引，跟主键性质一样）。如果没有这样的索引，InnoDB会隐式地定义一个主键来作为聚簇索引。</p>
<h2 id="聚簇索引-与-唯一索引"><a href="#聚簇索引-与-唯一索引" class="headerlink" title="聚簇索引 与 唯一索引"></a>聚簇索引 与 唯一索引</h2><p>严格来说，聚簇索引不一定是唯一索引，聚簇索引的索引值并不要求是唯一的，唯一聚簇索引才是！在一个有聚簇索引的列上是可以插入两个或多个相同值的，这些相同值在硬盘上的物理排序与聚簇索引的排序相同，仅此而已。</p>
<h2 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h2><h3 id="索引为什么是B-树"><a href="#索引为什么是B-树" class="headerlink" title="索引为什么是B+树"></a>索引为什么是B+树</h3><ol>
<li><strong>B+树只有叶节点存放数据，其余节点用来索引</strong>，而B-树是每个索引节点都会有Data域。所以从Mysql（Inoodb）的角度来看，B+树是用来充当索引的，一般来说索引非常大，尤其是关系性数据库这种数据量大的索引能达到亿级别，所以为了减少内存的占用，索引也会被存储在磁盘上。 </li>
<li>B-树/B+树 的特点就是每层节点数目非常多，层数很少，目的就是为了<strong>减少磁盘IO次数</strong>，但是B-树的每个节点都有data域（指针），这无疑增大了节点大小，说白了增加了磁盘IO次数（磁盘IO一次读出的数据量大小是固定的，单个数据变大，每次读出的就少，IO次数增多，一次IO多耗时），而<strong>B+树除了叶子节点其它节点并不存储数据，节点小，磁盘IO次数就少</strong>。这是优点之一。</li>
<li>B+树所有的Data域在叶子节点，一般来说都会进行一个优化，就是<strong>将所有的叶子节点用指针串起来</strong>。这样遍历叶子节点就能获得全部数据，这样就能进行<strong>区间访问</strong>啦。在数据库中基于范围的查询是非常频繁的，而B树不支持这样的遍历操作</li>
<li><strong>AVL 数和红黑树基本都是存储在内存中才会使用的数据结构</strong>。在大规模数据存储的时候，红黑树往往出现由于树的深度过大而造成磁盘IO读写过于频繁，进而导致效率低下的情况。为什么会出现这样的情况，我们知道要获取磁盘上数据，必须先通过磁盘移动臂移动到数据所在的柱面，然后找到指定盘面，接着旋转盘面找到数据所在的磁道，最后对数据进行读写。磁盘IO代价主要花费在查找所需的柱面上，<strong>树的深度过大会造成磁盘IO频繁读写</strong>。根据磁盘查找存取的次数往往由树的高度所决定，所以，只要我们通过某种较好的树结构减少树的结构尽量减少树的高度，B树可以有多个子女，从几十到上千，可以降低树的高度。</li>
</ol>
<p>数据库系统的设计者巧妙利用了磁盘预读原理，将一个节点的大小设为等于一个页，这样每个节点只需要一次I/O就可以完全载入。为了达到这个目的，在实际实现B-Tree还需要使用如下技巧：每次新建节点时，直接申请一个页的空间，这样就保证一个节点物理上也存储在一个页里，加之计算机存储分配都是按页对齐的，就实现了一个node只需一次I/O。</p>
<h3 id="B树和B-树是解决什么样的问题的，怎样演化过来，之间区别"><a href="#B树和B-树是解决什么样的问题的，怎样演化过来，之间区别" class="headerlink" title="B树和B+树是解决什么样的问题的，怎样演化过来，之间区别"></a>B树和B+树是解决什么样的问题的，怎样演化过来，之间区别</h3><p>B树和B+树，这题既问mysql索引的实现原理，也问数据结构基础，首先从二叉树说起，因为会产生退化现象，提出了平衡二叉树，再提出怎样让每一层放的节点多一些来减少遍历高度，引申出m叉树，m叉搜索树同样会有退化现象，引出m叉平衡树，也就是B树，这时候每个节点既放了key也放了value，怎样使每个节点放尽可能多的key值，以减少遍历高度呢（访问磁盘次数），可以将每个节点只放key值，将value值放在叶子结点，在叶子结点的value值增加指向相邻节点指针，这就是优化后的B+树。</p>
<h3 id="mysql给离散度低-重复多的字段-的字段建立索引会出现什么问题，具体说下原因"><a href="#mysql给离散度低-重复多的字段-的字段建立索引会出现什么问题，具体说下原因" class="headerlink" title="mysql给离散度低(重复多的字段)的字段建立索引会出现什么问题，具体说下原因"></a>mysql给离散度低(重复多的字段)的字段建立索引会出现什么问题，具体说下原因</h3><p>先上结论：重复性较强的字段，不适合添加索引。mysql给离散度低的字段，比如性别设置索引，再以性别作为条件进行查询反而会更慢。<br><br>一个表可能会涉及两个数据结构(文件)，一个是表本身，存放表中的数据，另一个是索引。索引是什么？它就是把一个或几个字段（组合索引）按规律排列起来，再附上该字段所在行数据的物理地址（位于表中）。比如我们有个字段是年龄，如果要选取某个年龄段的所有行，那么一般情况下可能需要进行一次全表扫描。但如果以这个年龄段建个索引，那么索引中会按年龄值根据特定数据结构建一个排列，这样在索引中就能迅速定位，不需要进行全表扫描。为什么性别不适合建索引呢？因为访问索引需要付出额外的IO开销，从索引中拿到的只是地址，要想真正访问到数据还是要对表进行一次IO。假如你要从表的100万行数据中取几个数据，那么利用索引迅速定位，访问索引的这IO开销就非常值了。但如果是从100万行数据中取50万行数据，就比如性别字段，那你相对需要访问50万次索引，再访问50万次表，加起来的开销并不会比直接对表进行一次完整扫描小。</p>

            <div class="post-copyright">
    <div class="content">
        <p>最后更新： 2019年07月08日 15:57</p>
        <p>原始链接： <a class="post-url" href="/2019/07/08/index-study/" title="索引整理">http://huaguoguo.gitee.io/2019/07/08/index-study/</a></p>
        <footer>
            <a href="http://huaguoguo.gitee.io">
                <img src="/images/logo.png" alt="华锅锅">
                华锅锅
            </a>
        </footer>
    </div>
</div>

      
        
            
<div class="page-reward">
    <a id="rewardBtn" href="javascript:;">赏</a>
</div>

<div id="reward" class="post-modal reward-lay">
    <a class="close" href="javascript:;" id="reward-close">×</a>
    <span class="reward-title">
        <i class="icon icon-quote-left"></i>
        请我吃糖~
        <i class="icon icon-quote-right"></i>
    </span>
    <div class="reward-content">
        
        <div class="reward-code">
            <img id="rewardCode" src="/images/wechat_code.png" alt="打赏二维码">
        </div>
        <div class="reward-select">
            
            <label class="reward-select-item checked" data-id="wechat" data-wechat="/images/wechat_code.png">
                <img class="reward-select-item-wechat" src="/images/wechat.png" alt="微信">
            </label>
            
            
            <label class="reward-select-item" data-id="alipay" data-alipay="/images/alipay_code.png">
                <img class="reward-select-item-alipay" src="/images/alipay.png" alt="支付宝">
            </label>
            
        </div>
    </div>
</div>


        
    </div>
    <footer class="article-footer">
        
        
<div class="post-share">
    <a href="javascript:;" id="share-sub" class="post-share-fab">
        <i class="fa fa-share-alt"></i>
    </a>
    <div class="post-share-list" id="share-list">
        <ul class="share-icons">
          <li>
            <a class="weibo share-sns" target="_blank" href="http://service.weibo.com/share/share.php?url=http://huaguoguo.gitee.io/2019/07/08/index-study/&title=《索引整理》 — 华锅锅的博客&pic=/images/index/index.png" data-title="微博">
              <i class="fa fa-weibo"></i>
            </a>
          </li>
          <li>
            <a class="weixin share-sns" id="wxFab" href="javascript:;" data-title="微信">
              <i class="fa fa-weixin"></i>
            </a>
          </li>
          <li>
            <a class="qq share-sns" target="_blank" href="http://connect.qq.com/widget/shareqq/index.html?url=http://huaguoguo.gitee.io/2019/07/08/index-study/&title=《索引整理》 — 华锅锅的博客&source=敲代码是热爱，敲到世界充满爱" data-title="QQ">
              <i class="fa fa-qq"></i>
            </a>
          </li>
          <li>
            <a class="facebook share-sns" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=http://huaguoguo.gitee.io/2019/07/08/index-study/" data-title="Facebook">
              <i class="fa fa-facebook"></i>
            </a>
          </li>
          <li>
            <a class="twitter share-sns" target="_blank" href="https://twitter.com/intent/tweet?text=《索引整理》 — 华锅锅的博客&url=http://huaguoguo.gitee.io/2019/07/08/index-study/&via=http://huaguoguo.gitee.io" data-title="Twitter">
              <i class="fa fa-twitter"></i>
            </a>
          </li>
          <li>
            <a class="google share-sns" target="_blank" href="https://plus.google.com/share?url=http://huaguoguo.gitee.io/2019/07/08/index-study/" data-title="Google+">
              <i class="fa fa-google-plus"></i>
            </a>
          </li>
        </ul>
     </div>
</div>
<div class="post-modal wx-share" id="wxShare">
    <a class="close" href="javascript:;" id="wxShare-close">×</a>
    <p>扫一扫，分享到微信</p>
    <img src="//api.qrserver.com/v1/create-qr-code/?data=http://huaguoguo.gitee.io/2019/07/08/index-study/" alt="微信分享二维码">
</div>

<div class="mask"></div>

        
        <ul class="article-footer-menu">
            
            
  <li class="article-footer-tags">
    <i class="fa fa-tags"></i>
      
    <a href="/tags/java/" class="color5">java</a>
      
    <a href="/tags/数据库/" class="color4">数据库</a>
      
  </li>

        </ul>
        
    </footer>
  </div>
</article>


    <aside class="post-toc-pos post-toc-top" id="post-toc">
        <nav class="post-toc-wrap">
            <ol class="post-toc"><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#概述"><span class="post-toc-text">概述</span></a></li><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#单列索引-与-复合索引"><span class="post-toc-text">单列索引 与 复合索引</span></a></li><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#唯一索引-与-主键"><span class="post-toc-text">唯一索引 与 主键</span></a></li><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#聚簇索引、非聚簇索引、主键"><span class="post-toc-text">聚簇索引、非聚簇索引、主键</span></a></li><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#聚簇索引-与-唯一索引"><span class="post-toc-text">聚簇索引 与 唯一索引</span></a></li><li class="post-toc-item post-toc-level-2"><a class="post-toc-link" href="#问题"><span class="post-toc-text">问题</span></a><ol class="post-toc-child"><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#索引为什么是B-树"><span class="post-toc-text">索引为什么是B+树</span></a></li><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#B树和B-树是解决什么样的问题的，怎样演化过来，之间区别"><span class="post-toc-text">B树和B+树是解决什么样的问题的，怎样演化过来，之间区别</span></a></li><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#mysql给离散度低-重复多的字段-的字段建立索引会出现什么问题，具体说下原因"><span class="post-toc-text">mysql给离散度低(重复多的字段)的字段建立索引会出现什么问题，具体说下原因</span></a></li></ol></li></ol>
        </nav>
    </aside>
    

<nav id="article-nav">
  
    <a href="/2019/07/27/mysqlFramework/" id="article-nav-newer" class="article-nav-link-wrap">

      <span class="article-nav-title">
        <i class="fa fa-hand-o-left" aria-hidden="true"></i>
        
          mysql服务架构
        
      </span>
    </a>
  
  
    <a href="/2019/07/04/hashmap/" id="article-nav-older" class="article-nav-link-wrap">
      <span class="article-nav-title">hashmap</span>
      <i class="fa fa-hand-o-right" aria-hidden="true"></i>
    </a>
  
</nav>



    
        <div id="SOHUCS" sid="index-study"></div>
<script type="text/javascript">
    (function(){
        var appid = 'cyudxaFKB';
        var conf = 'e3991feeac8273781b96fbec365fe014';
        var width = window.innerWidth || document.documentElement.clientWidth;
        if (width < 960) {
            window.document.write('<script id="changyan_mobile_js" charset="utf-8" type="text/javascript" src="https://changyan.sohu.com/upload/mobile/wap-js/changyan_mobile.js?client_id=' + appid + '&conf=' + conf + '"><\/script>'); } else { var loadJs=function(d,a){var c=document.getElementsByTagName("head")[0]||document.head||document.documentElement;var b=document.createElement("script");b.setAttribute("type","text/javascript");b.setAttribute("charset","UTF-8");b.setAttribute("src",d);if(typeof a==="function"){if(window.attachEvent){b.onreadystatechange=function(){var e=b.readyState;if(e==="loaded"||e==="complete"){b.onreadystatechange=null;a()}}}else{b.onload=a}}c.appendChild(b)};loadJs("https://changyan.sohu.com/upload/changyan.js",function(){window.changyan.api.config({appid:appid,conf:conf})}); } })(); </script>
    
</section>
        
      </div>
      <footer id="footer">
  <div class="outer">
    <div id="footer-info" class="inner">
      
<p>
    <span id="busuanzi_container_site_uv" style="display:none">
        总访客数：<span id="busuanzi_value_site_uv"></span>
    </span>
    <span id="busuanzi_container_site_pv" style="display:none">
        总访问量：<span id="busuanzi_value_site_pv"></span>
    </span>
</p>


      <p>
        Powered by  <a href="http://hexo.io/" target="_blank">Hexo</a>
        Theme <a href="//github.com/wongminho/hexo-theme-miho" target="_blank">MiHo</a>
      &copy; 2020 华锅锅<br>
      </p>
    </div>
  </div>
</footer>
    <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<script src="//cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script>
  var mihoConfig = {
      root: "http://huaguoguo.gitee.io",
      animate: true,
      isHome: false,
      share: true,
      reward: 1
  }
</script>
<div class="sidebar">
    <div id="sidebar-search" title="Search">
        <i class="fa fa-search"></i>
    </div>
    <div id="sidebar-category" title="Categories">
        <i class="fa fa-book"></i>
    </div>
    <div id="sidebar-tag" title="Tags">
        <i class="fa fa-tags"></i>
    </div>
    <div id="sidebar-top">
        <span class="sidebar-top-icon"><i class="fa fa-angle-up"></i></span>
    </div>
</div>
<div class="sidebar-menu-box" id="sidebar-menu-box">
    <div class="sidebar-menu-box-container">
        <div id="sidebar-menu-box-categories">
            <a class="category-link" href="/categories/First/">First</a>
        </div>
        <div id="sidebar-menu-box-tags">
            <a href="/tags/Hexo/" style="font-size: 10px;">Hexo</a> <a href="/tags/Sample/" style="font-size: 10px;">Sample</a> <a href="/tags/java/" style="font-size: 20px;">java</a> <a href="/tags/分布式/" style="font-size: 15px;">分布式</a> <a href="/tags/学习方法/" style="font-size: 10px;">学习方法</a> <a href="/tags/数据库/" style="font-size: 15px;">数据库</a> <a href="/tags/缓存/" style="font-size: 10px;">缓存</a> <a href="/tags/集合/" style="font-size: 10px;">集合</a>
        </div>
    </div>
    <a href="javascript:;" class="sidebar-menu-box-close">&times;</a>
</div>
<div class="mobile-header-menu-nav" id="mobile-header-menu-nav">
    <div class="mobile-header-menu-container">
        <span class="title">Menus</span>
        <ul class="mobile-header-menu-navbar">
            
            <li>
                <a href="/">
                    <i class="fa fa-home"></i><span>Home</span>
                </a>
            </li>
            
            <li>
                <a href="/archives">
                    <i class="fa fa-archive"></i><span>Archives</span>
                </a>
            </li>
            
            <li>
                <a href="/about">
                    <i class="fa fa-user"></i><span>About</span>
                </a>
            </li>
            
        </ul>
    </div>
    <div class="mobile-header-tag-container">
        <span class="title">Tags</span>
        <div id="mobile-header-container-tags">
            <a href="/tags/Hexo/" style="font-size: 10px;">Hexo</a> <a href="/tags/Sample/" style="font-size: 10px;">Sample</a> <a href="/tags/java/" style="font-size: 20px;">java</a> <a href="/tags/分布式/" style="font-size: 15px;">分布式</a> <a href="/tags/学习方法/" style="font-size: 10px;">学习方法</a> <a href="/tags/数据库/" style="font-size: 15px;">数据库</a> <a href="/tags/缓存/" style="font-size: 10px;">缓存</a> <a href="/tags/集合/" style="font-size: 10px;">集合</a>
        </div>
    </div>
</div>
<div class="search-wrap">
    <span class="search-close">&times;</span>
        <a href="javascript:;" class="header-icon waves-effect waves-circle waves-light" id="back">
            <i class="icon icon-lg icon-chevron-left"></i>
        </a>
        <input class="search-field" placeholder="Search..." id="keywords">
        <a id="search-submit" href="javascript:;">
            <i class="fa fa-search"></i>
        </a>
    <div class="search-container" id="search-container">
        <ul class="search-result" id="search-result">
        </ul>
    </div>
</div>

<div id="search-tpl">
    <li class="search-result-item">
        <a href="{url}" class="search-item-li">
            <span class="search-item-li-title" title="{title}">{title}</span>
        </a>
    </li>
</div>
<script src="/js/search.js"></script>
<script src="/js/main.js"></script>


  <script src="//cdn.bootcss.com/particles.js/2.0.0/particles.min.js"></script>
  <div id="particles"></div>
  <script src="/js/particles.js"></script>







  <link rel="stylesheet" href="//cdn.bootcss.com/animate.css/3.5.0/animate.min.css">
  <script src="//cdn.bootcss.com/scrollReveal.js/3.0.5/scrollreveal.js"></script>
  <script src="/js/animate.js"></script>


  <script src="/js/pop-img.js"></script>
  <script>
     $(".article-entry p img").popImg();
  </script>

  </div>
</body>
</html>